//#pragma once
//
//#include <string>
//#include <vector>
//#include <deque>
//#include <queue>
//#include <set>
//#include <json.hpp>
//#include <cinatra.hpp>
//#include <vector>
//#include "asio_executor.hpp"
//#include "client/smc_client.hpp"
//#include "room_data_define.hpp"
//
//
//
//using namespace cinatra;
//using namespace std;
//
//
//namespace bz {
//	class meet;
//	class smc_client;
//	class meet_room;
//
//	
//
//	class smc_room :public AsioExecutor , public smc_ws_observer{
//	public:
//		smc_room(asio::io_context& io , meet_room * room,meet* me, smc_client* smc,int meet_num, terminal* root_ter=nullptr,bool is_main = false, bool auto_invite=false);
//
//		~smc_room();
//		void before_del();
//		
//
//
//		async_simple::coro::Lazy<void> start_meet();
//		async_simple::coro::Lazy<bool> end_meet();
//
//		 async_simple::coro::Lazy<void> hand_all_sound(const bool mute);
//
//		 async_simple::coro::Lazy<bool> roll(terminal* ter);
//
//		 async_simple::coro::Lazy<void> set_default();
//
//		 async_simple::coro::Lazy<bool> choose(terminal* ter,bool is_poll = false);
//
//		 async_simple::coro::Lazy<void> cancel_choose(terminal* ter);
//		 async_simple::coro::Lazy<void> invite_device(terminal* ter);
//		 async_simple::coro::Lazy<void> set_audio_mute(terminal* ter,bool mute);
//		 async_simple::coro::Lazy<void> hungup_device(terminal* ter);
//		 async_simple::coro::Lazy<void> del_terminal(terminal* ter);
//		 async_simple::coro::Lazy<string> get_active_meet();
//		 async_simple::coro::Lazy<bool> change_layout(int picNum,vector<string> &parti_vec);
//		 async_simple::coro::Lazy<void> subscribe_terminal_detail(string parti);
//		 async_simple::coro::Lazy<void> unsubscribe_terminal_detail();
//
//
//		 async_simple::coro::Lazy<void> hungup_link();
//		 async_simple::coro::Lazy<void> recall_link();
//		 async_simple::coro::Lazy<void> camera_control(terminal* ter,string cmd);
//		 async_simple::coro::Lazy<void> set_chairman(terminal* ter);
//		 async_simple::coro::Lazy<void> choose_parent();
//		 async_simple::coro::Lazy<void> cancel_roll();
//
//		
//
//
//
//	protected:
//		void on_stages_info(json);
//		void on_room_info(json);
//		void on_ter_info(json);
//		void on_real_info(json);
//		void on_ws_connect() override;
//		void on_ws_close() override;
//	private:
//		async_simple::coro::Lazy<void> init();
//		async_simple::coro::Lazy<void> timer_check();
//		async_simple::coro::Lazy<void> get_conference_token();
//
//
//
//		
//
//		void remove_ter(terminal* ter);
//		async_simple::coro::Lazy<void> subscribe_ter();
//		async_simple::coro::Lazy<void> update_ter_sub(int type, vector<string> parti_ids);
//		async_simple::coro::Lazy<void> subscribe_room();
//		async_simple::coro::Lazy<void> unsubscribe_room();
//		async_simple::coro::Lazy<void> unsubscribe_ter();
//
//
//		async_simple::coro::Lazy<void> lock_chairman_video(bool lock);
//		async_simple::coro::Lazy<void> set_spokesman_mute();
//		async_simple::coro::Lazy<void> set_all_see_chairman();
//		async_simple::coro::Lazy<void> broadcast_muti();
//		async_simple::coro::Lazy<void> set_chariman(string chairman);
//		async_simple::coro::Lazy<void> on_start();
//		async_simple::coro::Lazy<void> set_ter_see_chairman(terminal* ter);
//		async_simple::coro::Lazy<void> choose_first();
//		async_simple::coro::Lazy<void> enter_control();
//		async_simple::coro::Lazy<void> flush_meet_info();
//		async_simple::coro::Lazy<void> on_chairman_change();
//
//		void smc_error_tips(api_res& rep);
//
//		meet* meet_;
//
//		std::set<string> parti_ids_set_;
//		std::set<string> poll_list_;
//
//		
//
//		bool shut_down_;
//		bool auto_invite_;
//
//		bool is_all_see_chairman_;
//		bool chairman_lock_;
//		bool link_status_;
//		int meet_num_;
//
//		int parti_num_;
//		uint32_t msg_count_;
//		int64_t sub_time_;
//
//		int64_t ter_sub_id_;
//		smc_client* smc_api_;
//		meet_room* meet_room_;
//		string chairman_;
//		string conference_id_;
//		string conference_token_;
//		string spokesman_id_;
//		string broadcast_id_;
//		string multi_poll_status_;
//		string obj_id_;
//		string real_access_code_;
//		
//
//		terminal* root_ter_;
//		terminal* parent_room_ter_;
//
//		vector<terminal*> terminal_list_;
//		bool is_main_;
//		bool is_ready_;
//		friend class meet_controller;
//
//		friend class serv_manage;
//		friend class meet_room;
//	};
//
//}